#!/usr/bin/env python
# -*- coding:utf-8 -*-

from types import MethodType

# 面向对象高级编程
# 1. 使用__slots__
"""
# 定义class
class Abc(object):
    pass

# 给实例绑定一个属性
s = Abc()
s.name = 'Marco'  # 动态给实例绑定一个属性.
print(s.name)


# 给实例绑定一个方法
def set_age(self,age): # 定义一个函数作为实例方法
    self.age = age 

from types import MethodType
s.set_age = MethodType(set_age,s) # 给实例绑定一个方法
s.set_age(25) # 调用实例方法
print(s.age) # 测试结果
"""



"""
Python允许在定义class时,定义一个特殊的__slots__变量,
来限制该class实例能添加的属性.
使用__slots__注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的.
"""
class Student(object):
    __slots__ = ('name','age') # 用tuple定义允许绑定的属性名称.


s = Student() # 创建新的实例
s.name = 'Michael' # 绑定属性'name'
s.age = 25 # 绑定属性'age'
